/**
 * 单例模式（Singleton Pattern）涉及到一个单一的类，该类负责创建自己的对象，同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式，可以直接访问，不需要实例化该类的对象。
 * 该模式的特点：
 * 单例类只能有一个实例。
 * 单例类必须自己创建自己的唯一实例。
 * 单例类必须给所有其他对象提供这一实例。
 */
let person

function createPerson(_name, _age) {
  // 1.创建一个对象
  if (!person) {
    person = {}
  }
  // 2.添加属性和方法
  person.name = _name;
  person.age = _age;

  // 3.返回对象
  return person;
}

const person1 = createPerson("marry", 18);
const person2 = createPerson("jack", 20);
console.log(person1)
console.log(person2)
/**
 * { name: 'jack', age: 20 }
 * { name: 'jack', age: 20 }
 */

/**
 * 可见，单例模式可以创建多个实例，但是，只要改变其中任一实例对象的属性值，其他所有的实例对象的属性值都变了。所以，单例类只能有一个实例，否则就会出错。
 */